home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_mc.idb / usr / freeware / lib32 / mc / extfs / a.z / a
Text File  |  2002-07-08  |  3KB  |  103 lines

  1. #! /usr/bin/perl
  2. #
  3. # External filesystem for mc, using mtools
  4. # Written Ludek Brukner <lubr@barco.cz>, 1997
  5. # Much improved by Tom Perkins <968794022@noid.net>, 2000
  6. #
  7. # WARNING - This software is ALPHA - Absolutely NO WARRANTY
  8.  
  9. # These mtools components must be in PATH for this to work
  10. $mmd = "mmd";
  11. $mrd = "mrd";
  12. $mdel = "mdel";
  13. $mdir = "mdir -a";
  14. $mcopy = "mcopy -noQ";
  15.  
  16. $0 =~ s|.*/||;
  17. $disk = $0;
  18.  
  19. SWITCH: for ( $ARGV[0] ) {
  20.   /list/ && do {
  21.     @dirs = get_dirs("");
  22.     while ($dir = shift(@dirs)) {
  23.       push @dirs, get_dirs("$dir/");
  24.     } exit 0; };
  25.   /mkdir/ && do {
  26.     shift; shift;
  27.     exit 1 if scalar(@ARGV) != 1;
  28.     system("$mmd $disk:/$ARGV[0] >& /dev/null");
  29.     exit 0; };
  30.   /rmdir/ && do {
  31.     shift; shift;
  32.     exit 1 if scalar(@ARGV) != 1;
  33.     system("$mrd $disk:/$ARGV[0] >& /dev/null");
  34.     exit 0; };
  35.   /rm/ && do {
  36.     shift; shift;
  37.     exit 1 if scalar(@ARGV) != 1;
  38.     system("$mdel $disk:/$ARGV[0] >& /dev/null");
  39.     exit 0; };
  40.   /copyout/ && do {
  41.     shift; shift;
  42.     exit 1 if scalar(@ARGV) != 2;
  43.     ( $src, $dest ) = @ARGV;
  44.     system("$mcopy $disk:/$src $dest >& /dev/null");
  45.     exit 0; };
  46.   /copyin/ && do {
  47.     shift; shift;
  48.     exit 1 if scalar(@ARGV) != 2;
  49.     ( $dest, $src ) = @ARGV;
  50.     system("$mcopy $src $disk:/$dest >& /dev/null");
  51.     exit 0; };
  52.   /.*/ && do {                               # an unfamiliar command
  53.     exit 1; };
  54. }
  55.  
  56. sub get_dirs {
  57.   my ($path, $name, $size, $date, $time, $longname, @lst, @rv);
  58.  
  59.   $path = shift(@_);
  60.   @rv = ();
  61.  
  62.   open(FILE,"$mdir $disk:/$path |");
  63.   while ( <FILE> ) {
  64.     chomp();
  65.     /^ / && next;                            # ignore `non-file' lines
  66.     m{^Directory for $0:/}i && next;         # ignore `non-file' lines
  67.     /^$/ && next;                            # ignore empty lines
  68.     /^\.\.?/ && next;                        # ignore `.' and `..'
  69.  
  70.     $name = substr($_,0,12);
  71.     $name =~ s/^([^ ]*) +([^ ]+)[ \t]*$/$1.$2/;
  72.     $name =~ s/[ .]+$//;
  73.  
  74.     $_ = substr($_,12);
  75.     s/^[ ]+//;
  76.  
  77.     ($size,$date,$time,$longname) = split(/[ \t]+/);
  78.  
  79.     @lst = split(/([:ap])/, $time);
  80.     $lst[0] += 12 if ($lst[3] eq "p");
  81.     $time = sprintf("%02d:%02d", $lst[0], $lst[2]);
  82.     @lst = split(/-/, $date);
  83.     $lst[2] %= 100 if ($lst[2] > 100);
  84.     $date = sprintf ("%02d-%02d-%02d", @lst);
  85.  
  86.     $name = $path . lc(($longname) ? $longname : $name);
  87.  
  88.     if ($size =~ /DIR/) {
  89.       printf("drwxr-xr-x   1 %-8d %-8d %8d %s %s %s\n",
  90.         0, 0, 0, $date, $time, $name);
  91.       push @rv, $name;
  92.     } else {
  93.       printf("-rw-r--r--   1 %-8d %-8d %8d %s %s %s\n",
  94.         0, 0, $size, $date, $time, $name);
  95.     }
  96.   }
  97.   close(FILE);
  98.   return @rv;
  99. }
  100.  
  101. 1;
  102.